package com.yb.project.algorithm.practice.test.test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str1="[1, 2, 3, 4, 5, 6]";
        // String str1="[]";
        String str2="2";
        //String str1=in.nextLine();
        //String str2=in.nextLine();
        System.out.println(str1.substring(1,str1.length()-1));
        String[] arr = str1.substring(1,str1.length()-1).split(", ");
        int num = Integer.valueOf(str2);
        System.out.println(arr);

        // 0 1 2 3
        List<Integer> lst1=new ArrayList<>();
        // 4 5 6 7
        List<Integer> lst2=new ArrayList<>();
        for(String str:arr){
            try{
                int index = Integer.valueOf(str);
                if(index<4){
                    lst1.add(index);
                }else{
                    lst2.add(index);
                }
            }catch (Exception e){

            }

        }
        List<String> res = new ArrayList<>();
        if(num==1){
            int num1 = lst1.size()-1;
            int num2 = lst2.size()-1;
            // 1 3 2 4 -1;
            // 0 2 1 3
            LinkedList<Integer> lst = new LinkedList<>();
            int[] ar = new int[]{0,2,1,3};
            int index = 0;
            while(index<4){
                if(num1==ar[index]){
                    for(int i=0;i<lst1.size();i++){
                        String str = "["+lst1.get(i)+"]";
                        res.add(str);
                    }
                }if(num2==ar[index]){
                    for(int i=0;i<lst2.size();i++){
                        String str = "["+lst2.get(i)+"]";
                        res.add(str);
                    }
                }
                if(res.size()>0){
                    break;
                }else{
                    index ++;
                }
            }
        }
        if(num==2){
            int num1 = lst1.size()-2;
            int num2 = lst2.size()-2;
            // 2 4 3;
            // 0 2 1
            int[] ar = new int[]{0,2,1};
            int index = 0;
            while(index<3){
                if(num1==ar[index]){
                    dfs(res,new LinkedList<>(),lst1,0);
                }if(num2==ar[index]){
                    dfs(res,new LinkedList<>(),lst2,0);
                }
                if(res.size()>0){
                    break;
                }else{
                    index ++;
                }
            }
        }
        if(num==4){
            if(lst1.size()==4){
                String str = "[0, 1, 2, 3]";
                res.add(str);
            }
            if(lst2.size()==4){
                String str = "[4, 5, 6, 7]";
                res.add(str);
            }
        }if(num==8){
            if(lst1.size()==4 && lst2.size()==4){
                String str = "[0, 1, 2, 3, 4, 5, 6, 7]";
                res.add(str);
            }
        }
        StringBuffer sb = new StringBuffer();
        sb.append("[");
        for(int i=0;i<res.size();i++){
            sb.append(res.get(i));
            if(i<res.size()-1){
                sb.append(", ");
            }else{
                sb.append("]");
            }
        }
        System.out.println(sb.toString());

    }

    public static void dfs(List<String> res,LinkedList<Integer> path,List<Integer> lst,int idx){
        if(path.size()==2){
            res.add("["+path.get(0)+", "+path.get(1)+"]");
            return;
        }

        for(int i=idx;i<lst.size();i++){
            path.add(lst.get(i));
            dfs(res,path,lst,i+1);
            path.pollLast();
        }
    }
}
